/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package cn.icanci.design.builder.singletonpattern.demo03;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * @author icanci
 * @date Created in 2021/07/11 23:39
 * @version 1.0
 */
public class Demo03Main {
    public static void main(String[] args) {
        System.out.println("------------------------------------------------------------------------");
        demo03SingletonTest();
        System.out.println("------------------------------------------------------------------------");
        demo03SingletonUpdateTest();
    }

    public static void demo03SingletonTest() {
        Demo03Singleton s1 = null;
        Demo03Singleton s2 = Demo03Singleton.getInstance();

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("Demo03Singleton.obj");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(s2);
            oos.flush();
            oos.close();

            FileInputStream fis = new FileInputStream("Demo03Singleton.obj");
            ObjectInputStream ois = new ObjectInputStream(fis);
            s1 = (Demo03Singleton) ois.readObject();
            ois.close();
            System.out.println(s1);
            System.out.println(s2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void demo03SingletonUpdateTest() {
        Demo03SingletonUpdate s1 = null;
        Demo03SingletonUpdate s2 = Demo03SingletonUpdate.getInstance();

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("Demo03Singleton.obj");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(s2);
            oos.flush();
            oos.close();

            FileInputStream fis = new FileInputStream("Demo03Singleton.obj");
            ObjectInputStream ois = new ObjectInputStream(fis);
            s1 = (Demo03SingletonUpdate) ois.readObject();
            ois.close();
            System.out.println(s1);
            System.out.println(s2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
